import Vue from 'vue'
// 创建 store状态管理
import Vuex from 'vuex'
Vue.use(Vuex)
let username = ''
// 每当初始化项目的时候，就先从localStorage中取一下数据
if (localStorage.getItem("UserInfo")) {
    username = window.JSON.parse(localStorage.getItem("UserInfo")).username
}
let car = window.JSON.parse(localStorage.getItem(username + 'cart') || '[]')
const store = new Vuex.Store({
    state: {
        // 在cart中，应该把每个商品，存储为一个对象 {id,count,selected,price}
        cart: car//购物车数组 
    },
    mutations: {
        addToCar(state, goods) {
            // 将商品添加到购物车
            // 如果购物车之前曾经有该商品，则只更新数量，如果曾经没有，则直接push
            // state.cart.push(goods);
            // console.log(state,goods)
            let flag = false;
            state.cart.some(item => {
                if (item.id == goods.id) {
                    item.count += goods.count;
                    flag = true;
                    return true;
                    // 此处不直接写else,反而加了flag,原因是：
                    // 如果用户添加的商品是小米手机，此时就要查看他的购物车是否存在小米手机，就要从购物车第一个东西开始查，如果第一个不是，就继续查，直到最后，如果查不出，就说明他之前没有将该商品加过购物车，我们得让商品添加进购物车。
                    // 如果加入else，则说明只要从第一个商品开始不匹配就得将商品添加进购物车，就乱套了。
                }
            })
            if (!flag) {
                state.cart.push(goods)
            }

            // 为了持久化存储购物车的数据，可以把购物车的商品，序列化处理，存储到localStorage中。
            // localStorage.setItem('cart', window.JSON.stringify(state.cart))
            localStorage.setItem(username + 'cart', window.JSON.stringify(state.cart))
        },
        updateGoodsCount(state, goods) {
            //只要在购物车页面nobox数值变化，就会先触发shopcar_nobox里面的countchange,传改变的值给mapMutation里的这个函数，然后将购物车徽标改变，并存入内存中
            state.cart.some(item => {
                if (item.id == goods.id) {
                    item.count = goods.count
                    return true
                }
            })
            localStorage.setItem(username + 'cart', window.JSON.stringify(state.cart))
        },
        delFromCart(state, id) {
            state.cart.some((item, i) => {
                if (item.id == id) {
                    state.cart.splice(i, 1)
                    return true
                }
            })
            // 在本地保存
            localStorage.setItem(username + 'cart', window.JSON.stringify(state.cart))
        },
        changeSelectState(state, obj) {
            // 根据提供的obj对象的id和selected属性，更改购物车中商品的selected状态
            state.cart.forEach(item => {
                if (item.id == obj.id) {
                    item.selected = obj.selected
                    return true
                }
            })
            localStorage.setItem(username + 'cart', window.JSON.stringify(state.cart))
        },
        // changeDiscount(state, obj) {
        //     // 根据提供的obj对象的id和selected属性，更改购物车中商品的selected状态
        //     state.cart.forEach(item => {
        //         if (item.id == obj.id) {
        //             item.selected = obj.selected
        //             return true
        //         }
        //     })
        //     localStorage.setItem(username+'cart', window.JSON.stringify(state.cart))
        // }
    },
    getters: {
        // 优点：只要检测到cart变化，数据就会改变
        totalCount(state) {
            //徽标中商品数量
            let c = 0;
            //getters的特性，只要依赖的数据变化了，必然会重新计算这个getters的值
            state.cart.forEach(item => {
                c += item.count;
            })
            return c
        },
        idstr(state) {
            //获取购物车中所有商品的id字符串
            let arr = []
            state.cart.forEach(item => arr.push(item.id))
            return arr.join(',')
        },
        countObj(state) {
            // 获取购物车中商品的Id和商品数量的键值对对应关系
            let o = {}
            state.cart.forEach(item => o[item.id] = item.count)
            return o
            /*{
                88:3,
                89:5
            }
             */
        },
        selectedObj(state) {
            let o = {}
            state.cart.forEach(item => o[item.id] = item.selected)
            return o
            /*{
                88:true,
                89:false
            }
            */
        },
        selectedCount(state) {
            // 勾选商品的数量
            let c = 0
            state.cart.forEach(item => {
                // 只有这项商品被选中了，就增加数量
                if (item.selected) c += item.count
            })
            return c
        },
        amount(state) {
            // 总价
            let c = 0
            state.cart.forEach(item => {
                if (item.selected) c += item.count * item.price
            })
            return c.toFixed(2)
        },
        discountStr(state) {
            // 勾选商品的数量
            let c = 0
            let disList = []
            let disIdList = []
            let discountStrList =[]
            state.cart.forEach(item => {
                // 只有这项商品被选中了，就增加数量
                if (item.selected) {
                    let totalPrice = item.count * item.price;
                    let dis = 0
                    item.useStatusList.forEach(item1 => {
                        if (totalPrice > item1.limit_num) {
                            dis = item1.sub
                        }
                    })
                    c += dis
                    item.useStatusList.forEach(item1 => {
                        if (item1.sub == dis) {
                            disIdList.push(item1.id)
                            disList.push(item.sub)
                            discountStrList.push(item1.discount)
                        }
                    })
                }
            })
            return { total: c, disList: disList,disIdList: disIdList, discountStrList:discountStrList }
        },
    },
})

export default store